While computer systems are generally known for their speed and accuracy in performing difficult or complex logical or arithmetic tasks, many such tasks still consume a significant amount of time to complete, sometimes on the order of minutes. As a result, most computer systems, typically via their operating systems, may provide some dynamic visual indication, such as a progress bar, that informs the user how much time approximately remains until the task is complete, or what percentage or portion of the task has been completed.
For example, the transfer of large files or file folders from one disk drive to another may take several seconds or minutes to complete. To provide the user an indication of how long the task may take, the system may measure the transfer rate of the data transfer periodically, and revise the indicator accordingly to inform the user of the amount of time remaining until completion of the transfer, the amount of data remaining to be transferred, and/or the like.
However, in other examples, providing a progress indicator may be more difficult. For example, the computer task or tasks involved may be much more complicated, or not provide a means whereby progress may be measured, unlike a basic data transfer operation. Complex applications, for example, often employ complicated backend systems, in which multiple transaction systems (e.g., an enterprise resource planning (ERP) system, a customer relationship management (CRM) system, and/or a human resources (HR) system) may be accessed to satisfy complex business requirements. Further, one or more reporting systems (e.g., a business warehouse (BW) or business intelligence (BI) system) may also be involved in the same task. In such complicated systems, determining the specific systems that are used for a particular command or task, and to what extent each of the systems will be employed, in order to provide a progress indicator may be extremely difficult.
In the alternative, the operating system or another portion of the system may periodically query or poll the process or thread performing such a task to determine the progress of the computer task, but such polling may increase the amount of processing overhead of the process or thread that is executing the actual task at hand, thus increasing the amount of time consumed by the task. In addition, the processing time of such tasks may depend on a number of characteristics of the actual computer system performing the task, rendering generic execution time estimates that apply to all computer systems somewhat inaccurate. Further, as noted above, determining which portions of the computer system are involved in the particular task may be difficult to determine. Consequently, determining which portions of the system to poll may be problematic under some scenarios.